package com.itlong.cloud.service;

import com.itlong.cloud.POJO.DTO.smartcard.SmartCardSyncMessageDTO;
import com.itlong.cloud.POJO.DTO.smartcard.SmartCardSyncTaskStatusDTO;
import com.itlong.cloud.POJO.PO.SmartCardPushPO;
import com.itlong.cloud.POJO.PO.TimeTaskPushAnalysisPO;

import java.util.List;

/**
 * <desc>
 *      与旺龙一卡通对接-操作一卡通push云端的数据的接口
 * </desc>
 *
 * @createDate 2017-11-01
 */
public interface ISmartCardSyncDataPushService {

     /**
     * <desc>
     *     初步处理一卡通推送给云端的数据（放入相应的push表中并在变化标记表中登记）
     * </desc>
     *
     * @param  smartCardSyncMessageDTO 一卡通推送到云端同步数据.
     * @author LewisLouis
     * @createDate 2017-12-20
     */
     void receiveSyncDataFromSmartCard(SmartCardSyncMessageDTO smartCardSyncMessageDTO) throws Exception;


    /**
     * <desc>
     *     解析Push表中数据的定时任务获取有数据变动的push表
     * <desc/>
     *
     * @param mark 数据变动标记 0:无变动 | 1:有变动
     * @return List<TimeTaskPushAnalysisPO> 定时任务临时表数据集
     * @author zhangs
     * @createDate 2017/11/3
     */
    List<TimeTaskPushAnalysisPO> getPushTableName(Integer mark);


    /**
    * <desc>
    *     获取是否有任意一卡通项目推送给云端的数据需处理.
    * </desc>
    *
    * @return SmartCardSyncTaskStatusDTO 定时任务（分析一卡通推送给云端的数据）的运行状态.
    * @author LewisLouis
    * @createDate 2017-12-26
    */
    SmartCardSyncTaskStatusDTO getSmartCardSyncTaskStatus();


    /**
     * <desc>
     *     设置是否有任意一卡通项目推送给云端的数据需处理.
     * </desc>
     *
     * @return true 有数据； false 无数据
     * @author LewisLouis
     * @createDate 2017-12-26
     */
    /**
    * <desc>
    *    XXXXX.
    * </desc>
    *
    * @param taskStatus 一卡通同步任务运行状态
    * @return
    * @author LewisLouis
    * @createDate 2017-12-29
    */
    void setSmartCardSyncTaskStatus(SmartCardSyncTaskStatusDTO taskStatus);

    /**
     * <desc>
     *     定时任务获取push表中未解析的数据
     * <desc/>
     *
     * @param tableName 查询条件
     * @return List<SmartCardPushPO> 旺龙一卡通push的数据集
     * @author zhangs
     * @createDate 2017/11/3
     */
    List<SmartCardPushPO> getUnresolvedPushData(String tableName);

    /**
     * <desc>
     *     更新表time_task_push_analysis中push表名对应的数据处理状态
     * <desc/>
     *
     * @param timeTaskPushAnalysisPO 存储有数据需要解析的push表信息的定时任务临时表
     * @return
     * @author zhangs
     * @createDate 2017/11/3
     */
    void updateTimeTaskPushStatus(TimeTaskPushAnalysisPO timeTaskPushAnalysisPO);

    /**
     * <desc>
     *      更新push表中已完成解析的数据的状态
     * <desc/>
     *
     * @param tableName Push表名
     * @param id 数据唯一标识
     * @return
     * @author zhangs
     * @createDate 2017/11/16
     */
    void setSyncPushDataResolvedById(String tableName, Integer id);


    /**
     * <desc>
     *    将已处理的一卡通同步到云端到数据进行转移.
     * </desc>
     *
     * @param tableName push表
     * @return xx
     * @author LewisLouis
     * @createDate 2018-01-09
     */
    void movePushDataToColdTable(String tableName);
}
